using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Negocio.Controladora;
using Entidades;

namespace VtasMkt.Ventas.VentaAlojamiento
{
    public partial class frmAdministrarVentaAlojamiento : Form
    {

        #region Variables y constantes

        // DataTable que se empleara para la vista previa de la impresion
        DataTable dtImp = new DataTable();

        // Columnas de la grilla
        int colCodEstado = 5;

        #endregion

        #region Eventos del formulario

        // Constructor del formulario
        public frmAdministrarVentaAlojamiento()
        {
            InitializeComponent();
        }

        // Al cargar el formulario
        private void AdministrarVentaAlojamiento_Load(object sender, EventArgs e)
        {
            CargarComboBox();
            if (FiltroValido())
            {
                MostrarInfoGrilla();
            }
        }

        // Busca la ventas segun el filtro
        private void btnBuscar_Click(object sender, EventArgs e)
        {
            if (FiltroValido())
            {
                MostrarInfoGrilla();
            }
        }

        // Muestra el formulario detalle para registrar una nueva venta
        private void btnNuevo_Click(object sender, EventArgs e)
        {
            Entidades.Venta oVenta = new Entidades.Venta();
            oVenta.CodigoVenta = 0; // Nueva venta

            frmRegistrarVentaAlojamiento regVenta = new frmRegistrarVentaAlojamiento(oVenta);
            regVenta.Tag = AccionMnt.NuevoRegistro;
            //regVenta.MdiParent = frmMain.ActiveForm;
            regVenta.ShowDialog();

            if (FiltroValido())
            {
                MostrarInfoGrilla();
            }
        }

        // Muestra el buscador de clientes
        private void btnBuscarCliente_Click(object sender, EventArgs e)
        {
            VtasMkt.General.frmBusquedaCliente verBusCli = new VtasMkt.General.frmBusquedaCliente(this);
            verBusCli.MdiParent = frmMain.ActiveForm;
            verBusCli.Show();
        }

        // Cierra el formulario
        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        // Muestra la consulta de la venta (edicion del registro de venta)
        private void btnConsultar_Click(object sender, EventArgs e)
        {
            if (dgvMain.SelectedRows.Count > 0)
            {
                Entidades.Venta oVenta = new Entidades.Venta();
                oVenta.CodigoVenta = (int)(this.dgvMain.SelectedRows[0].Cells[0].Value);

                frmRegistrarVentaAlojamiento regVenta = new frmRegistrarVentaAlojamiento(oVenta);
                regVenta.Tag = AccionMnt.ListarRegistros;
                //regVenta.MdiParent = frmMain.ActiveForm;
                regVenta.ShowDialog();

                if (FiltroValido())
                {
                    MostrarInfoGrilla();
                }
            }
            else
            {
                MessageBox.Show("Se debe selecionar un registro.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        // Muestra la venta para anularla (eliminacion del registro de venta)
        private void btnAnular_Click(object sender, EventArgs e)
        {
            // Verifica que tenga algun registro seleccionado
            if (dgvMain.SelectedRows.Count > 0)
            {
                // Verifica que la venta este con el estado Registrado
                if (Convert.ToInt32(dgvMain.SelectedRows[0].Cells[colCodEstado].Value) == 1)
                {
                    Entidades.Venta oVenta = new Entidades.Venta();
                    oVenta.CodigoVenta = (int)(this.dgvMain.SelectedRows[0].Cells[0].Value);

                    frmRegistrarVentaAlojamiento regVenta = new frmRegistrarVentaAlojamiento(oVenta);
                    regVenta.Tag = AccionMnt.EliminarRegistro;
                    //regVenta.MdiParent = frmMain.ActiveForm;
                    regVenta.ShowDialog();

                    if (FiltroValido())
                    {
                        MostrarInfoGrilla();
                    }
                }
                else
                {
                    MessageBox.Show("Solo se puede anular una venta en estado 'Registrada'.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            else
            {
                MessageBox.Show("Se debe selecionar un registro.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        // Muestra la vista previa del reporte
        private void btnImprimir_Click(object sender, EventArgs e)
        {
            // Prepara el DataSet para la vista previa
            dsVentaAlojamiento dsVtaAlojamiento = new dsVentaAlojamiento();
            dsVtaAlojamiento.dtVentaAlojamiento.Merge(dtImp);

            // Muestra el formulario de vista previa con el reporte
            VtasMkt.General.frmVerReporte verRptWin = new VtasMkt.General.frmVerReporte(dsVtaAlojamiento);
            verRptWin.MdiParent = frmMain.ActiveForm;
            verRptWin.Show();
        }

        #endregion

        #region Metodos privados

        // Valida el filtro
        private bool FiltroValido()
        {
            VtasMkt.General.RutinasGenericas rutGen = new VtasMkt.General.RutinasGenericas();

            String fechaIni = rutGen.FechaYYYYMMDD(dtpFecIni.Value);
            String fechaFin = rutGen.FechaYYYYMMDD(dtpFecFin.Value);

            if (Convert.ToInt32(fechaIni) > Convert.ToInt32(fechaFin))
            {
                MessageBox.Show("La fecha inicial no puede ser mayor a la fecha final", this.Text,
                    MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return false;
            }

            // En todo este ok
            return true;
        }

        // Muestra la informacion en la grilla del formulario
        private void MostrarInfoGrilla()
        {
            try
            {
                ActualizarVentaAlojamiento oVtaAlojamiento = new ActualizarVentaAlojamiento();                
                VtasMkt.General.RutinasGenericas rutGen = new VtasMkt.General.RutinasGenericas();

                // Prepara los valores por defecto
                int codCliente = 0;
                if (((String)(txtCodigoCliente.Tag) == "") || (txtCodigoCliente.Tag == null)) 
                {
                    codCliente = 0;
                }
                else
                {
                    codCliente = (int)txtCodigoCliente.Tag;
                }

                // Obtiene la informacion y carga la grilla
                DataTable dtp = oVtaAlojamiento.ListaVentaAlojamiento(codCliente,
                    rutGen.FechaYYYYMMDD(dtpFecIni.Value), rutGen.FechaYYYYMMDD(dtpFecFin.Value),
                    cboEstadoVenta.SelectedValue.ToString());
                dgvMain.DataSource = dtp;

                // Deja en memoria el DataTable para la impresion
                dtImp = dtp;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        // Carga los comboboxs
        private void CargarComboBox()
        {
            try
            {
                // Obtiene la lista y agrega un item dummy para el filtro
                ActualizarVentaAlojamiento oEstadoVenta = new ActualizarVentaAlojamiento();
                DataTable dtInfo = oEstadoVenta.ListaEstadoVenta(1);
                dtInfo.Rows.InsertAt(dtInfo.NewRow(), 0);

                // Carga el combobox de Estado de Ventas
                cboEstadoVenta.DataSource = dtInfo;
                cboEstadoVenta.DisplayMember = "cDescripcion";
                cboEstadoVenta.ValueMember = "iValor";
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        #endregion

    }
}